int fd, i;
struct bochs_header bochs;
- fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE | O_SYNC);
+ fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE);
if (fd < 0) {
fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE);
if (fd < 0)
BDRVCloopState *s = bs->opaque;
uint32_t offsets_size,max_compressed_block_size=1,i;
- s->fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE | O_SYNC);
+ s->fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE);
if (s->fd < 0)
return -1;
bs->read_only = 1;
struct cow_header_v2 cow_header;
int64_t size;
- fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE | O_SYNC);
+ fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE);
if (fd < 0) {
fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE);
if (fd < 0)
int fd, len, i, shift;
QCowHeader header;
- fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE | O_SYNC);
+ fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE);
if (fd < 0) {
fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE);
if (fd < 0)
uint32_t magic;
int l1_size;
- fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE | O_SYNC);
+ fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE);
if (fd < 0) {
fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE);
if (fd < 0)
int rv;
#endif
- fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE | O_SYNC);
+ fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE);
if (fd < 0) {
fd = open(filename, O_RDONLY | O_BINARY | O_LARGEFILE);
if (fd < 0)
PCIDevice *pci_dev;
struct BMDMAState *bmdma;
int drive_serial;
+ int write_cache;
/* ide regs */
uint8_t feature;
uint8_t error;
}
ide_set_sector(s, sector_num + n);
+ if (!s->write_cache)
+ bdrv_flush(s->bs);
+
#ifdef TARGET_I386
if (win2k_install_hack && ((++s->irq_count % 16) == 0)) {
/* It seems there is a bug in the Windows 2000 installer HDD
transfer_size -= len;
phys_addr += len;
}
+ /* Ensure the data hit disk before telling the guest OS so. */
+ if (!s->write_cache)
+ bdrv_flush(s->bs);
+
return transfer_size1 - transfer_size;
}
/* XXX: valid for CDROM ? */
switch(s->feature) {
case 0x02: /* write cache enable */
+ s->write_cache = 1;
+ s->status = READY_STAT | SEEK_STAT;
+ ide_set_irq(s);
+ break;
case 0x82: /* write cache disable */
+ s->write_cache = 0;
+ s->status = READY_STAT | SEEK_STAT;
+ ide_set_irq(s);
+ break;
case 0xaa: /* read look-ahead enable */
case 0x55: /* read look-ahead disable */
s->status = READY_STAT | SEEK_STAT;
s->irq = irq;
s->sector_write_timer = qemu_new_timer(vm_clock,
ide_sector_write_timer_cb, s);
+ s->write_cache = 0;
ide_reset(s);
}
}